/*  步骤1：先取得当前类的原型，当前实例对象的原型链
 步骤2：一直循环（执行原型链的查找机制）
   取得当前实例对象原型链的原型链（proto = proto.__proto__，沿着原型链一直向上查找）
   如果 当前实例的原型链__proto__上找到了当前类的原型prototype，则返回 true
   如果 一直找到Object.prototype.__proto__ == null，Object的基类(null)上面都没找到，则返回 false */

function Fun() {}
const fn = new Fun();

function _instanceof(instanceObj, classOrFun) {
    //基本数据类型直接返回false
  if (typeof instanceObj !== "object" || instanceObj === null) return false;
  let proto = Object.getPrototypeOf(instanceObj) // 等价于instanceObj.__proto__;
  while(proto) {
    // 实例的原型等于当前构造函数的原型
    if(proto === classOrFun.prototype) return true;
    // 沿着原型链__proto__一层一层向上查
    proto = Object.getPrototypeOf(proto) // 等价于proto.__proto__
    
  }
  return false
}

// console.log(fn instanceof Object);
console.log(_instanceof([1,2],Fun))
